﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace Logica
{
    public class Ejecutar
    {

        private Nodo LeerWSDL()
        {
            Yylex nvoScanner = null;
            parser nvoParser = null;

            try
            {
                using (TextReader reader = File.OpenText(@"C:/Proyecto2/Definicion2.wsdl"))
                {
                    nvoScanner = new Yylex(reader);
                    nvoParser = new parser(nvoScanner);

                    nvoParser.parse();

                    return parser.raiz;

                    Console.WriteLine("[Ejecutar.cs][LeerWSDL] El parser se ejecuto correctamente.");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("[Ejecutar.cs][LeerWSDL] Hubo un error al ejecutar el parser.");
            }
            return null;
        }

        public String obtenerDefinicionServicio()
        {
            Nodo raiz = LeerWSDL();

            String salida = "";
            salida += "<ul>";
            foreach (Nodo metodo in raiz.getHijoEn(2).getHijos())
            {
                String nombre = metodo.getEtiqueta();
                salida += "<li type=\"disc\"><a href=\"Metodo.aspx?nombre="+nombre + "\">" + nombre + "</a></li>";
            }
            salida += "</ul>";

            return salida;
        }

        public String obtenerDefinicionMetodo(String metodo)
        {
            Nodo raiz = LeerWSDL();
            Nodo metodos = raiz.getHijoEn(2);

            String salida = "";
            salida += "<form runat=\"server\" action=\"Metodo.aspx\" method=\"post\" tarjet=\"_blank\">" +
                "<table cellspacing=\"0\" cellpadding=\"4\" frame=\"box\" bordercolor=\"#dcdcdc\" rules=\"none\" style=\"border-collapse: collapse;\">";
            foreach (Nodo Nodo_metodo in metodos.getHijos())
            {
                String nombre = Nodo_metodo.getEtiqueta();
                if (nombre.Equals(metodo))
                {
                    Nodo parametros = Nodo_metodo.getHijoEn(0);
                    int i = 0;
                    salida += "<tr><th style=\"border-right: 2px solid white;background:#dcdcdc\" >Nombre</th>" +
                                  "<th style=\"border-right: 2px solid white;background:#dcdcdc\">Valor</th>" +
                                  "<th style=\"border-right: 2px 2px solid white;background:#dcdcdc\">Tipo</th></tr>";
                    foreach (Nodo parametro in parametros.getHijos())
                    {
                        String nombre_parametro = parametro.getHijoEn(0).getEtiqueta();
                        String tipo_parametro = parametro.getHijoEn(1).getEtiqueta();
                        salida += "<tr>";
                        salida += "<td><label>" + nombre_parametro + ":</label></td><td><input type=\"text\" name=\"param"+ i++ +"\"/></td><td><label>(" + tipo_parametro + ")</label></td>";
                        salida += "</tr>";
                    }
                    salida += "<tr><td><input type=\"hidden\" name=\"nombre\" value=\""+metodo+"\"/>";
                    salida += "<input type=\"hidden\" name=\"clase\" value=\"" + raiz.getHijoEn(0).getEtiqueta() +"\"/>";
                    salida += "<input type=\"hidden\" name=\"tam\" value=\"" + raiz.getHijoEn(1).getEtiqueta() + "\"/></td>";
                    salida += "<td><input type=\"submit\" value=\"Invocar\"/></td><td></td></tr>";
                    break;
                }
            }
            salida += "</table></form>";

            return salida;
        }
    }
}
